package ginblog

import (
	"blog.wuzhispace.com/internal/handle"
	"blog.wuzhispace.com/internal/middleware"
	"github.com/gin-gonic/gin"
)

var (
	//	后台管理系统接口
	categoryAPI handle.Category // 分类
	tagAPI      handle.Tag      // 标签
	articleAPI  handle.Article  // 文章
	userAPI     handle.User     // 用户
	userAuthAPI handle.UserAuth // 用户认证

	uploadAPI handle.Upload // 上传

	menuAPI         handle.Menu         // 菜单
	roleAPI         handle.Role         // 角色
	blogInfoAPI     handle.BlogInfo     // 博客设置
	commentAPI      handle.Comment      // 评论
	linkAPI         handle.Link         // 友链
	messageAPI      handle.Message      // 留言
	operationLogAPI handle.OperationLog // 操作记录
	pageAPI         handle.Page         // 页面
)

func RegisterHandlers(r *gin.Engine) {
	registerBaseHandler(r)
	registerAdminHandler(r)
	registerBlogHandler(r)
}

func registerBaseHandler(r *gin.Engine) {
	base := r.Group("/api")
	// TODO: 登录, 注册 记录日志
	base.POST("/login", userAuthAPI.Login)       // 登录
	base.POST("/register", userAuthAPI.Register) // 注册
	base.GET("/logout", userAuthAPI.Logout)      // 退出登录
	//base.POST("/report", blogInfoAPI.Report)        // 上报信息
	//base.GET("/config", blogInfoAPI.GetConfigMap)   // 获取配置
	//base.PATCH("/config", blogInfoAPI.UpdateConfig) // 更新配置
	//base.GET("/code", userAuthAPI.SendCode)         // 验证码
}

func registerAdminHandler(r *gin.Engine) {
	auth := r.Group("/api")
	// !注意使用中间件的顺序
	auth.Use(middleware.JWTAuth())
	auth.Use(middleware.PermissionCheck())
	auth.Use(middleware.OperationLog())
	auth.Use(middleware.ListenOnline())

	auth.GET("/home", blogInfoAPI.GetHomeInfo) // 后台首页信息
	auth.POST("/upload", uploadAPI.UploadFile) // 文件上传
	//	博客设置
	setting := auth.Group("/setting")
	{
		setting.GET("/about", blogInfoAPI.GetAbout)    // 获取关于我
		setting.PUT("/about", blogInfoAPI.UpdateAbout) // 编辑关于我
	}

	//	用户模块
	user := auth.Group("/user")
	{
		user.GET("/list", userAPI.GetList)
	}
	//	分类模块
	category := auth.Group("/category")
	{
		category.GET("/list", categoryAPI.GetList)     // 获取分类列表
		category.POST("", categoryAPI.SaveOrUpdate)    // 保存或更新分类
		category.DELETE("", categoryAPI.Delete)        // 删除分类
		category.GET("/option", categoryAPI.GetOption) // 获取分类选项
	}

	//	标签模块
	tag := auth.Group("/tag")
	{
		tag.GET("/list", tagAPI.GetList)     // 获取标签列表
		tag.POST("", tagAPI.SaveOrUpdate)    // 保存或更新标签
		tag.DELETE("", tagAPI.Delete)        // 删除标签
		tag.GET("/option", tagAPI.GetOption) // 获取标签选项
	}
	//	文章模块
	article := auth.Group("/article")
	{
		//article.GET("/list", articleAPI.GetList)     // 获取文章列表
		article.POST("", articleAPI.SaveOrUpdate) // 保存或更新文章
		//article.DELETE("", articleAPI.Delete)        // 删除文章
		//article.GET("/option", articleAPI.GetOption) // 获取文章选项
	}
	//	评论模块
	comment := auth.Group("/comment")
	{
		comment.GET("/list", commentAPI.GetList) // 获取评论列表
	}
	//	留言模块
	message := auth.Group("/message")
	{
		message.GET("/list", messageAPI.GetList)        // 获取留言列表
		message.DELETE("", messageAPI.Delete)           // 删除留言
		message.PUT("/review", messageAPI.UpdateReview) // 审核留言
	}
}

// 博客前台的接口: 大部分不需要登录, 部分需要登录
func registerBlogHandler(r *gin.Engine) {
	base := r.Group("/api/front")

	// 需要登录才能进行的操作
	base.Use(middleware.JWTAuth())
}
